package com.wei.czz.common.utils;

import com.wei.czz.common.constant.Constant;
import com.wei.czz.common.po.UserPo;
import com.wei.czz.framework.security.entity.SecurityUser;

import java.util.Optional;

/**
 * Created by IntelliJ IDEA.
 *
 * @author wei
 * date: 2022-05-08 16:22:19
 * className: SecurityUtils 安全框架工具类
 * version: 1.0
 * description:
 */
public class SecurityUtils {

    /**
     * 获取用户登录记录对象（UserDetails子类）
     * @return 用户登录记录Optional对象
     */
    public static Optional<SecurityUser> securityUserOptional() {
        return Optional.ofNullable(ContextUtils.get(Constant.SECURITY_USER));
    }

    /**
     * 获取用户登录记录对象（UserDetails子类）
     * @return 用户登录记录对象
     */
    public static SecurityUser getSecurityUser() {
        return securityUserOptional().orElse(null);
    }

    /**
     * 获取用户对象（只包含一些基本信息）
     * @return 用户Optional对象
     */
    public static Optional<UserPo> userPoOptional() {
        return securityUserOptional().map(SecurityUser::getUserPo);
    }

    /**
     * 获取用户对象（只包含一些基本信息）
     * @return 用户对象
     */
    public static UserPo getUser() {
        return userPoOptional().orElse(null);
    }

    /**
     * 获取用户id
     * @return 用户id
     */
    public static Long getUserId() {
        return getOrDefaultUserId(null);
    }

    /**
     * 获取用户id
     * @param defaultUserId 获取用户id为空时，取用该值
     * @return 用户id
     */
    public static Long getOrDefaultUserId(Long defaultUserId) {
        return userPoOptional().map(UserPo::getUserId).orElse(defaultUserId);
    }

    /**
     * 获取用户名称
     * @return 用户名称
     */
    public static String getUsername() {
        return getOrDefaultUsername(null);
    }

    /**
     * 获取用户名称
     * @param defaultUsername 获取用户名称为空时，取用该值
     * @return 用户名称
     */
    public static String getOrDefaultUsername(String defaultUsername) {
        return userPoOptional().map(UserPo::getUsername).orElse(defaultUsername);
    }

}
